home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / communication / bbs / termv4.6 / extras / source / term-source.lha / SerialPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-18  |  17.1 KB  |  713 lines

  1. /*
  2. **    SerialPanel.c
  3. **
  4. **    Editing panel for serial configuration
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #ifndef _GLOBAL_H
  11. #include "Global.h"
  12. #endif
  13.  
  14. enum    {    GAD_BAUD=1000,GAD_DATABITS,GAD_PARITY,GAD_STOPBITS,GAD_HANDSHAKING,GAD_DUPLEX,GAD_BUFFERSIZE,GAD_BREAKLENGTH,
  15.         GAD_STRIP,GAD_HIGHSPEED,GAD_CHECK_CARRIER,GAD_SHARED,GAD_XON_XOFF,GAD_PASSTHROUGH,
  16.         GAD_DEVICE,GAD_SELECT,GAD_UNIT,GAD_QUANTUM,GAD_SATISFY_ODU,GAD_USE_OWNDEVUNIT,GAD_RELEASE_WHEN_ONLINE,
  17.         GAD_RELEASE_WHEN_DIALING,GAD_NO_ODU_IF_SHARED,GAD_USE,GAD_CANCEL,
  18.         GAD_PAGER,GAD_PAGEGROUP,GAD_DIRECT_CONNECTION
  19.     };
  20.  
  21. STATIC LONG Sizes[] =
  22. {
  23.     16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288
  24. };
  25.  
  26. STATIC LONG __saveds __stdargs
  27. ShowSerialSize(struct Gadget *SomeGadget,LONG Level)
  28. {
  29.     return(Sizes[Level]);
  30. }
  31.  
  32. STATIC LONG __saveds __asm
  33. RateHookFunc(REG(a2) LONG Current,REG(a1) LONG Command)
  34. {
  35.     LONG Index;
  36.  
  37.     if(Current < BaudRates[0])
  38.         Current = BaudRates[Index = 0];
  39.     else
  40.     {
  41.         if(Current > BaudRates[NumBaudRates - 1])
  42.             Current = BaudRates[Index = NumBaudRates - 1];
  43.         else
  44.         {
  45.             LONG i;
  46.  
  47.             Index = -1;
  48.  
  49.             for(i = 0 ; i < NumBaudRates ; i++)
  50.             {
  51.                 if(Current == BaudRates[i])
  52.                 {
  53.                     switch(Command)
  54.                     {
  55.                         case INCREMENTERMSG_DECREMENT:
  56.  
  57.                             if(i > 0)
  58.                                 return(BaudRates[i - 1]);
  59.                             else
  60.                                 return(Current);
  61.  
  62.                         case INCREMENTERMSG_INCREMENT:
  63.  
  64.                             if(i < NumBaudRates - 1)
  65.                                 return(BaudRates[i + 1]);
  66.                             else
  67.                                 return(Current);
  68.  
  69.                         default:
  70.  
  71.                             return(Current);
  72.                     }
  73.                 }
  74.             }
  75.  
  76.             if(Index == -1)
  77.             {
  78.                 if(Command == INCREMENTERMSG_DECREMENT)
  79.                 {
  80.                     for(i = 0 ; i < NumBaudRates ; i++)
  81.                     {
  82.                         if(BaudRates[i] <= Current)
  83.                             Index = i;
  84.                     }
  85.  
  86.                     if(BaudRates[Index] < Current || !Index)
  87.                         return(BaudRates[Index]);
  88.                     else
  89.                         return(BaudRates[Index - 1]);
  90.                 }
  91.                 else
  92.                 {
  93.                     for(i = NumBaudRates - 1 ; i >= 0 ; i--)
  94.                     {
  95.                         if(BaudRates[i] >= Current)
  96.                             Index = i;
  97.                     }
  98.  
  99.                     if(Command == INCREMENTERMSG_INITIAL)
  100.                     {
  101.                         if(Index == -1)
  102.                             return(Current);
  103.                         else
  104.                             return(BaudRates[Index]);
  105.                     }
  106.                     else
  107.                     {
  108.                         if(BaudRates[Index] > Current || Index == NumBaudRates - 1)
  109.                             return(BaudRates[Index]);
  110.                         else
  111.                             return(BaudRates[Index + 1]);
  112.                     }
  113.                 }
  114.             }
  115.         }
  116.     }
  117.  
  118.     if(Index == -1 || (Command != INCREMENTERMSG_DECREMENT && Command != INCREMENTERMSG_INCREMENT))
  119.         return(Current);
  120.     else
  121.     {
  122.         if(Command == INCREMENTERMSG_DECREMENT)
  123.         {
  124.             if(Index > 0)
  125.                 return(BaudRates[Index - 1]);
  126.             else
  127.                 return(BaudRates[Index]);
  128.         }
  129.         else
  130.         {
  131.             if(Index < NumBaudRates - 1)
  132.                 return(BaudRates[Index + 1]);
  133.             else
  134.                 return(BaudRates[Index]);
  135.         }
  136.     }
  137. }
  138.  
  139. BOOL
  140. SerialPanel(struct Window *Parent,struct Configuration *LocalConfig)
  141. {
  142.     STATIC struct Hook IncrementerHook =
  143.     {
  144.         {NULL},
  145.         (HOOKFUNC)RateHookFunc
  146.     };
  147.  
  148.     STATIC LONG PageTitleID[5] =
  149.     {
  150.         MSG_V36_0171,
  151.         MSG_V36_0179,
  152.         MSG_V36_0176,
  153.         MSG_ODU_SUPPORT_TXT,
  154.         -1
  155.     };
  156.  
  157.     STATIC BYTE         InitialPage = 0;
  158.  
  159.     STRPTR             PageLabels[5];
  160.     struct LayoutHandle    *Handle;
  161.     BOOL             UseIt = FALSE;
  162.  
  163.     memset(PageLabels,0,sizeof(PageLabels));
  164.  
  165.     LocalizeStringTable(PageLabels,PageTitleID);
  166.  
  167.     if(!OwnDevUnitBase)
  168.     {
  169.         PageLabels[3] = NULL;
  170.  
  171.         if(InitialPage >= 3)
  172.             InitialPage = 2;
  173.     }
  174.  
  175.     SaveConfig(LocalConfig,PrivateConfig);
  176.  
  177.     if(Handle = LT_CreateHandleTags(Parent -> WScreen,
  178.         LH_LocaleHook,    &LocaleHook,
  179.         LH_ExitFlush,    FALSE,
  180.     TAG_DONE))
  181.     {
  182.         struct Window    *PanelWindow;
  183.         LONG         Size,Quantum,Bits,StopBits,i;
  184.  
  185.         for(i = 4 ; i < NumElements(Sizes) ; i++)
  186.         {
  187.             if(Sizes[i] <= PrivateConfig -> SerialConfig -> SerialBufferSize)
  188.                 Size = i;
  189.         }
  190.  
  191.         for(i = 0 ; i < NumElements(Sizes) ; i++)
  192.         {
  193.             if(Sizes[i] <= PrivateConfig -> SerialConfig -> Quantum)
  194.                 Quantum = i;
  195.         }
  196.  
  197.         if(PrivateConfig -> SerialConfig -> HighSpeed)
  198.         {
  199.             PrivateConfig -> SerialConfig -> BitsPerChar    = 8;
  200.             PrivateConfig -> SerialConfig -> StopBits    = 1;
  201.             PrivateConfig -> SerialConfig -> Parity        = PARITY_NONE;
  202.         }
  203.  
  204.         LT_New(Handle,
  205.             LA_Type,VERTICAL_KIND,
  206.         TAG_DONE);
  207.         {
  208.             LT_New(Handle,
  209.                 LA_Type,VERTICAL_KIND,
  210.             TAG_DONE);
  211.             {
  212.                 LT_New(Handle,
  213.                     LA_Type,    TAB_KIND,
  214.                     LA_ID,        GAD_PAGER,
  215.                     LA_LabelID,    MSG_XFER_PAGE_TXT,
  216.                     GTCY_Labels,    PageLabels,
  217.                     LACY_AutoPageID,GAD_PAGEGROUP,
  218.                     LACY_TabKey,    TRUE,
  219.                     LA_BYTE,    &InitialPage,
  220.                     LATB_FullWidth,    TRUE,
  221.                 TAG_DONE);
  222.  
  223.                 LT_EndGroup(Handle);
  224.             }
  225.  
  226.             LT_New(Handle,
  227.                 LA_Type,    VERTICAL_KIND,
  228.                 LA_ID,        GAD_PAGEGROUP,
  229.                 LAGR_ActivePage,InitialPage,
  230.             TAG_DONE);
  231.             {
  232.                 LT_New(Handle,
  233.                     LA_Type,VERTICAL_KIND,
  234.                 TAG_DONE);
  235.                 {
  236.                     LT_New(Handle,
  237.                         LA_Type,        INTEGER_KIND,
  238.                         LA_LabelID,        MSG_SERIALPANEL_BAUD_RATE_GAD,
  239.                         LA_LONG,        &PrivateConfig -> SerialConfig -> BaudRate,
  240.                         LA_ID,            GAD_BAUD,
  241.                         GTIN_MaxChars,        8,
  242.                         LAIN_Min,        0,
  243.                         LAIN_UseIncrementers,    TRUE,
  244.                         LAIN_IncrementerHook,    &IncrementerHook,
  245.                     TAG_DONE);
  246.  
  247.                     Bits = PrivateConfig -> SerialConfig -> BitsPerChar - 7;
  248.  
  249.                     LT_New(Handle,
  250.                         LA_Type,        CYCLE_KIND,
  251.                         LA_ID,            GAD_DATABITS,
  252.                         LA_LabelID,        MSG_SERIALPANEL_BITS_PER_CHAR_GAD,
  253.                         LA_LONG,        &Bits,
  254.                         GA_Disabled,        PrivateConfig -> SerialConfig -> HighSpeed,
  255.                         LACY_FirstLabel,    MSG_SERIALPANEL_SEVEN_BITS_TXT,
  256.                         LACY_LastLabel,        MSG_SERIALPANEL_EIGHT_BITS_TXT,
  257.                     TAG_DONE);
  258.  
  259.                     LT_New(Handle,
  260.                         LA_Type,        CYCLE_KIND,
  261.                         LA_ID,            GAD_PARITY,
  262.                         LA_LabelID,        MSG_SERIALPANEL_PARITY_GAD,
  263.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> Parity,
  264.                         GA_Disabled,        PrivateConfig -> SerialConfig -> HighSpeed,
  265.                         LACY_FirstLabel,    MSG_SERIALPANEL_NO_PARITY_TXT,
  266.                         LACY_LastLabel,        MSG_SERIALPANEL_SPACE_TXT,
  267.                     TAG_DONE);
  268.  
  269.                     StopBits = PrivateConfig -> SerialConfig -> StopBits - 1;
  270.  
  271.                     LT_New(Handle,
  272.                         LA_Type,        CYCLE_KIND,
  273.                         LA_ID,            GAD_STOPBITS,
  274.                         LA_LabelID,        MSG_SERIALPANEL_STOP_BITS_GAD,
  275.                         LA_LONG,        &StopBits,
  276.                         GA_Disabled,        PrivateConfig -> SerialConfig -> HighSpeed,
  277.                         LACY_FirstLabel,    MSG_SERIALPANEL_ONE_BIT_TXT,
  278.                         LACY_LastLabel,        MSG_SERIALPANEL_TWO_BITS_TXT,
  279.                     TAG_DONE);
  280.  
  281.                     LT_New(Handle,
  282.                         LA_Type,        CYCLE_KIND,
  283.                         LA_LabelID,        MSG_SERIALPANEL_HANDSHAKING_GAD,
  284.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> HandshakingProtocol,
  285.                         LACY_FirstLabel,    MSG_SERIALPANEL_HANDSHAKING_NONE_TXT,
  286.                         LACY_LastLabel,        MSG_SERIALPANEL_HANDSHAKING_RTS_CTS_DSR_TXT,
  287.                     TAG_DONE);
  288.  
  289.                     LT_New(Handle,
  290.                         LA_Type,        CHECKBOX_KIND,
  291.                         LA_LabelID,        MSG_SERIALPANEL_LOCAL_ECHO_GAD,
  292.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> Duplex,
  293.                     TAG_DONE);
  294.  
  295.                     LT_New(Handle,
  296.                         LA_Type,        SliderType,
  297.                         LA_LabelID,        MSG_SERIALPANEL_BUFFER_SIZE_GAD,
  298.                         LA_LONG,        &Size,
  299.                         GTSL_Min,        4,
  300.                         GTSL_Max,        NumElements(Sizes) - 1,
  301.                         GTSL_DispFunc,        ShowSerialSize,
  302.                         GTSL_LevelFormat,    LocaleBase ? "%7lD" : "%7ld",
  303.                     TAG_DONE);
  304.  
  305.                     LT_New(Handle,
  306.                         LA_Type,        INTEGER_KIND,
  307.                         LA_LabelID,        MSG_SERIALPANEL_BREAK_LENGTH_GAD,
  308.                         LA_LONG,        &PrivateConfig -> SerialConfig -> BreakLength,
  309.                         GTIN_MaxChars,        8,
  310.                     TAG_DONE);
  311.  
  312.                     LT_New(Handle,
  313.                         LA_Type,        CHECKBOX_KIND,
  314.                         LA_LabelID,        MSG_SERIALPANEL_HIGH_SPEED_MODE_GAD,
  315.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> HighSpeed,
  316.                         LA_ID,            GAD_HIGHSPEED,
  317.                     TAG_DONE);
  318.  
  319.                     LT_EndGroup(Handle);
  320.                 }
  321.  
  322.                 LT_New(Handle,
  323.                     LA_Type,VERTICAL_KIND,
  324.                 TAG_DONE);
  325.                 {
  326.                     LT_New(Handle,
  327.                         LA_Type,        STRING_KIND,
  328.                         LA_LabelID,        MSG_SERIALPANEL_SERIAL_DEVICE_GAD,
  329.                         LA_Chars,        20,
  330.                         LA_STRPTR,        PrivateConfig -> SerialConfig -> SerialDevice,
  331.                         GTST_MaxChars,        255,
  332.                         LAST_Picker,        TRUE,
  333.                         LA_ID,            GAD_DEVICE,
  334.                     TAG_DONE);
  335.  
  336.                     LT_New(Handle,
  337.                         LA_Type,        INTEGER_KIND,
  338.                         LA_LabelID,        MSG_SERIALPANEL_DEVICE_UNIT_NUMBER_GAD,
  339.                         LA_LONG,        &PrivateConfig -> SerialConfig -> UnitNumber,
  340.                         LA_ID,            GAD_UNIT,
  341.                         LAIN_UseIncrementers,    TRUE,
  342.                         GTIN_MaxChars,        8,
  343.                     TAG_DONE);
  344.  
  345.                     LT_EndGroup(Handle);
  346.                 }
  347.  
  348.                 LT_New(Handle,
  349.                     LA_Type,VERTICAL_KIND,
  350.                 TAG_DONE);
  351.                 {
  352.                     LT_New(Handle,
  353.                         LA_Type,        CHECKBOX_KIND,
  354.                         LA_LabelID,        MSG_SERIALPANEL_STRIP_BIT_8_GAD,
  355.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> StripBit8,
  356.                     TAG_DONE);
  357.  
  358.                     LT_New(Handle,
  359.                         LA_Type,        CHECKBOX_KIND,
  360.                         LA_LabelID,        MSG_SERIALPANEL_SHARED_ACCESS_GAD,
  361.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> Shared,
  362.                         LA_ID,            GAD_SHARED,
  363.                     TAG_DONE);
  364.  
  365.                     LT_New(Handle,
  366.                         LA_Type,        CHECKBOX_KIND,
  367.                         LA_LabelID,        MSG_SERIALPANEL_XON_XOFF_GAD,
  368.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> xONxOFF,
  369.                     TAG_DONE);
  370.  
  371.                     LT_New(Handle,
  372.                         LA_Type,        CHECKBOX_KIND,
  373.                         LA_LabelID,        MSG_SERIALPANEL_PASS_XON_XOFF_THROUGH_GAD,
  374.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> PassThrough,
  375.                     TAG_DONE);
  376.  
  377.                     LT_New(Handle,
  378.                         LA_Type,        CHECKBOX_KIND,
  379.                         LA_LabelID,        MSG_SERIALPANEL_CHECK_CARRIER_GAD,
  380.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> CheckCarrier,
  381.                         GA_Disabled,        PrivateConfig -> SerialConfig -> DirectConnection,
  382.                         LA_ID,            GAD_CHECK_CARRIER,
  383.                     TAG_DONE);
  384.  
  385.                     LT_New(Handle,
  386.                         LA_Type,        CHECKBOX_KIND,
  387.                         LA_LabelID,        MSG_DIRECT_CONNECTION_GAD,
  388.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> DirectConnection,
  389.                         LA_ID,            GAD_DIRECT_CONNECTION,
  390.                     TAG_DONE);
  391.  
  392.                     LT_New(Handle,
  393.                         LA_Type,        SliderType,
  394.                         LA_LabelID,        MSG_SERIALPANEL_QUANTUM_GAD,
  395.                         LA_LONG,        &Quantum,
  396.                         LA_Chars,        6,
  397.                         GTSL_Min,        0,
  398.                         GTSL_Max,        NumElements(Sizes) - 1,
  399.                         GTSL_Level,        Quantum,
  400.                         GTSL_DispFunc,        ShowSerialSize,
  401.                         GTSL_LevelFormat,    LocaleBase ? "%7lD" : "%7ld",
  402.                     TAG_DONE);
  403.  
  404.                     LT_EndGroup(Handle);
  405.                 }
  406.  
  407.                 LT_New(Handle,
  408.                     LA_Type,VERTICAL_KIND,
  409.                 TAG_DONE);
  410.                 {
  411.                     LT_New(Handle,
  412.                         LA_Type,VERTICAL_KIND,
  413.                     TAG_DONE);
  414.                     {
  415.                         LT_New(Handle,
  416.                             LA_Type,        CHECKBOX_KIND,
  417.                             LA_LabelID,        MSG_SERIALPANEL_USE_OWNDEVUNIT_TXT,
  418.                             LA_BYTE,        &PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  419.                             LA_ID,            GAD_USE_OWNDEVUNIT,
  420.                             LA_LabelPlace,        PLACE_RIGHT,
  421.                         TAG_DONE);
  422.  
  423.                         LT_New(Handle,
  424.                             LA_Type,        CHECKBOX_KIND,
  425.                             LA_LabelID,        MSG_DO_NOT_USE_IF_DEVICE_IS_IN_SHARED_MODE_TXT,
  426.                             LA_BYTE,        &PrivateConfig -> SerialConfig -> NoODUIfShared,
  427.                             LA_ID,            GAD_NO_ODU_IF_SHARED,
  428.                             GA_Disabled,        !PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  429.                             LA_LabelPlace,        PLACE_RIGHT,
  430.                         TAG_DONE);
  431.  
  432.                         LT_New(Handle,
  433.                             LA_Type,        CHECKBOX_KIND,
  434.                             LA_LabelID,        MSG_RELEASE_DEVICE_WHEN_ONLINE_TXT,
  435.                             LA_BYTE,        &PrivateConfig -> SerialConfig -> ReleaseODUWhenOnline,
  436.                             LA_ID,            GAD_RELEASE_WHEN_ONLINE,
  437.                             GA_Disabled,        !PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  438.                             LA_ExtraSpace,        TRUE,
  439.                             LA_LabelPlace,        PLACE_RIGHT,
  440.                         TAG_DONE);
  441.  
  442.                         LT_New(Handle,
  443.                             LA_Type,        CHECKBOX_KIND,
  444.                             LA_LabelID,        MSG_RELEASE_DEVICE_WHEN_DIALING_TXT,
  445.                             LA_BYTE,        &PrivateConfig -> SerialConfig -> ReleaseODUWhenDialing,
  446.                             LA_ID,            GAD_RELEASE_WHEN_DIALING,
  447.                             GA_Disabled,        !PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  448.                             LA_LabelPlace,        PLACE_RIGHT,
  449.                         TAG_DONE);
  450.  
  451.                         LT_New(Handle,
  452.                             LA_Type,        MX_KIND,
  453.                             LA_LabelID,        MSG_SATISFY_ODU_TXT,
  454.                             LA_BYTE,        &PrivateConfig -> SerialConfig -> SatisfyODURequests,
  455.                             LA_ID,            GAD_SATISFY_ODU,
  456.                             LACY_FirstLabel,    MSG_SATISFY_ODU_MODE1_TXT,
  457.                             LACY_LastLabel,        MSG_SATISFY_ODU_MODE3_TXT,
  458.                             GA_Disabled,        !PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  459.                             LA_ExtraSpace,        TRUE,
  460.                         TAG_DONE);
  461.  
  462.                         LT_EndGroup(Handle);
  463.                     }
  464.  
  465.                     LT_EndGroup(Handle);
  466.                 }
  467.  
  468.                 LT_EndGroup(Handle);
  469.             }
  470.  
  471.             LT_New(Handle,
  472.                 LA_Type,VERTICAL_KIND,
  473.             TAG_DONE);
  474.             {
  475.                 LT_New(Handle,
  476.                     LA_Type,    XBAR_KIND,
  477.                     LAXB_FullSize,    TRUE,
  478.                 TAG_DONE);
  479.  
  480.                 LT_EndGroup(Handle);
  481.             }
  482.  
  483.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  484.                 LAGR_SameSize,    TRUE,
  485.                 LAGR_Spread,    TRUE,
  486.             TAG_DONE);
  487.             {
  488.                 LT_New(Handle,
  489.                     LA_Type,    BUTTON_KIND,
  490.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  491.                     LA_ID,        GAD_USE,
  492.                     LABT_ReturnKey,    TRUE,
  493.                     LABT_ExtraFat,    TRUE,
  494.                 TAG_DONE);
  495.  
  496.                 LT_New(Handle,
  497.                     LA_Type,    BUTTON_KIND,
  498.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  499.                     LA_ID,        GAD_CANCEL,
  500.                     LABT_EscKey,    TRUE,
  501.                     LABT_ExtraFat,    TRUE,
  502.                 TAG_DONE);
  503.  
  504.                 LT_EndGroup(Handle);
  505.             }
  506.  
  507.             LT_EndGroup(Handle);
  508.         }
  509.  
  510.         if(PanelWindow = LT_Build(Handle,
  511.             LAWN_TitleID,        MSG_SERIALPANEL_SERIAL_PREFERENCES_TXT,
  512.             LAWN_IDCMP,        IDCMP_CLOSEWINDOW,
  513.             LAWN_HelpHook,        &GuideHook,
  514.             LAWN_Parent,        Parent,
  515.             WA_DepthGadget,        TRUE,
  516.             WA_CloseGadget,        TRUE,
  517.             WA_DragBar,        TRUE,
  518.             WA_RMBTrap,        TRUE,
  519.             WA_Activate,        TRUE,
  520.             WA_SimpleRefresh,    TRUE,
  521.         TAG_DONE))
  522.         {
  523.             UBYTE             DummyBuffer[MAX_FILENAME_LENGTH];
  524.             struct IntuiMessage    *Message;
  525.             ULONG             MsgClass;
  526.             UWORD             MsgCode;
  527.             struct Gadget        *MsgGadget;
  528.             BOOL             Done = FALSE;
  529.  
  530.             GuideContext(CONTEXT_SERIAL);
  531.  
  532.             PushWindow(PanelWindow);
  533.  
  534.             LT_ShowWindow(Handle,TRUE);
  535.  
  536.             do
  537.             {
  538.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  539.                     break;
  540.  
  541.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  542.                 {
  543.                     MsgClass    = Message -> Class;
  544.                     MsgCode        = Message -> Code;
  545.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  546.  
  547.                     LT_ReplyIMsg(Message);
  548.  
  549.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  550.                         Done = TRUE;
  551.  
  552.                     if(MsgClass == IDCMP_GADGETUP)
  553.                     {
  554.                         switch(MsgGadget -> GadgetID)
  555.                         {
  556.                             case GAD_USE_OWNDEVUNIT:
  557.  
  558.                                 LT_SetAttributes(Handle,GAD_SATISFY_ODU,
  559.                                     GA_Disabled,!PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  560.                                 TAG_DONE);
  561.  
  562.                                 LT_SetAttributes(Handle,GAD_RELEASE_WHEN_ONLINE,
  563.                                     GA_Disabled,!PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  564.                                 TAG_DONE);
  565.  
  566.                                 LT_SetAttributes(Handle,GAD_RELEASE_WHEN_DIALING,
  567.                                     GA_Disabled,!PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  568.                                 TAG_DONE);
  569.  
  570.                                 LT_SetAttributes(Handle,GAD_NO_ODU_IF_SHARED,
  571.                                     GA_Disabled,!PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  572.                                 TAG_DONE);
  573.  
  574.                                 break;
  575.  
  576.                             case GAD_HIGHSPEED:
  577.  
  578.                                 if(MsgCode)
  579.                                 {
  580.                                     LT_SetAttributes(Handle,GAD_PARITY,
  581.                                         GA_Disabled,    TRUE,
  582.                                         GTCY_Active,    PARITY_NONE,
  583.                                     TAG_DONE);
  584.  
  585.                                     LT_SetAttributes(Handle,GAD_STOPBITS,
  586.                                         GA_Disabled,    TRUE,
  587.                                         GTCY_Active,    0,
  588.                                     TAG_DONE);
  589.  
  590.                                     LT_SetAttributes(Handle,GAD_DATABITS,
  591.                                         GA_Disabled,    TRUE,
  592.                                         GTCY_Active,    1,
  593.                                     TAG_DONE);
  594.                                 }
  595.                                 else
  596.                                 {
  597.                                     LT_SetAttributes(Handle,GAD_PARITY,
  598.                                         GA_Disabled,    FALSE,
  599.                                     TAG_DONE);
  600.  
  601.                                     LT_SetAttributes(Handle,GAD_STOPBITS,
  602.                                         GA_Disabled,    FALSE,
  603.                                     TAG_DONE);
  604.  
  605.                                     LT_SetAttributes(Handle,GAD_DATABITS,
  606.                                         GA_Disabled,    FALSE,
  607.                                     TAG_DONE);
  608.                                 }
  609.  
  610.                                 break;
  611.  
  612.                             case GAD_DIRECT_CONNECTION:
  613.  
  614.                                 LT_SetAttributes(Handle,GAD_CHECK_CARRIER,
  615.                                     GA_Disabled,    MsgCode,
  616.                                 TAG_DONE);
  617.  
  618.                                 break;
  619.  
  620.                             case GAD_USE:
  621.  
  622.                                 LT_UpdateStrings(Handle);
  623.  
  624.                                 PrivateConfig -> SerialConfig -> SerialBufferSize    = Sizes[Size];
  625.                                 PrivateConfig -> SerialConfig -> Quantum        = Sizes[Quantum];
  626.                                 PrivateConfig -> SerialConfig -> BitsPerChar        = Bits + 7;
  627.                                 PrivateConfig -> SerialConfig -> StopBits        = StopBits + 1;
  628.  
  629.                                 UseIt = Done = TRUE;
  630.  
  631.                                 break;
  632.  
  633.                             case GAD_CANCEL:
  634.  
  635.                                 Done = TRUE;
  636.                                 break;
  637.  
  638.                             case GAD_DEVICE:
  639.  
  640.                                 FindLibDev(PanelWindow,LT_GetString(Handle,MsgGadget -> GadgetID),NT_DEVICE,NULL);
  641.                                 break;
  642.                         }
  643.                     }
  644.  
  645.                     if(MsgClass == IDCMP_IDCMPUPDATE && MsgGadget -> GadgetID == GAD_DEVICE)
  646.                     {
  647.                         LT_LockWindow(PanelWindow);
  648.  
  649.                         strcpy(DummyBuffer,(STRPTR)LT_GetAttributes(Handle,GAD_DEVICE));
  650.                         strcpy(SharedBuffer,DummyBuffer);
  651.  
  652.                         if(PickFile(PanelWindow,"Devs:","#?.device",LocaleString(MSG_SERIALPANEL_SELECT_DEVICE_TXT),SharedBuffer,NT_DEVICE))
  653.                         {
  654.                             if(Stricmp(DummyBuffer,SharedBuffer))
  655.                             {
  656.                                 LT_SetAttributes(Handle,GAD_DEVICE,GTST_String,SharedBuffer,TAG_DONE);
  657.  
  658.                                 FindLibDev(PanelWindow,SharedBuffer,NT_DEVICE,NULL);
  659.                             }
  660.                         }
  661.  
  662.                         LT_UnlockWindow(PanelWindow);
  663.  
  664.                         LT_ShowWindow(Handle,TRUE);
  665.                     }
  666.                 }
  667.             }
  668.             while(!Done);
  669.  
  670.             PopWindow();
  671.         }
  672.  
  673.         LT_DeleteHandle(Handle);
  674.     }
  675.  
  676.     if(UseIt)
  677.     {
  678.         if(Config -> MiscConfig -> ProtectiveMode)
  679.         {
  680.             if(PrivateConfig -> SerialConfig -> BaudRate >= 4800 && PrivateConfig -> SerialConfig -> HandshakingProtocol == HANDSHAKING_NONE && !PrivateConfig -> SerialConfig -> DirectConnection)
  681.             {
  682.                 if(ShowRequest(Window,LocaleString(MSG_NO_RTSCTS_TXT),LocaleString(MSG_GLOBAL_YES_NO_TXT),PrivateConfig -> SerialConfig -> BaudRate))
  683.                     PrivateConfig -> SerialConfig -> HandshakingProtocol = HANDSHAKING_RTSCTS_DSR;
  684.             }
  685.         }
  686.  
  687.             /* Is the device driver closed up and is the main
  688.              * program making the call?
  689.              */
  690.  
  691.         if(LocalConfig == Config && !ReadRequest)
  692.         {
  693.                 /* Is the serial configuration any different?
  694.                  * If not, zap the serial device name in the
  695.                  * alternate buffer to force the driver to
  696.                  * get reopened.
  697.                  */
  698.  
  699.             if(!memcmp(Config -> SerialConfig,PrivateConfig -> SerialConfig,sizeof(struct SerialSettings)))
  700.                 Config -> SerialConfig -> SerialDevice[0] = 0;
  701.         }
  702.     }
  703.  
  704.         // The edited settings are now in PrivateConfig
  705.  
  706.     if(UseIt)
  707.         SwapConfig(LocalConfig,PrivateConfig);
  708.     else
  709.         SaveConfig(LocalConfig,PrivateConfig);
  710.  
  711.     return(UseIt);
  712. }
  713.